//引入express组件
const express = require('express');
const User = require('../models/user'); 
//创建路由对象
const router=express.Router();

//引入数据库连接模块
//const User=require('../models/user');

//添加获取所有用户的接口
//api：GET/api/users
router.get('/', async (req, res) => {
  try {
    const users = await User.findAll({
      order: [['created_at', 'ASC'], ['id', 'DESC']],
    });
    res.json({ status: 'ok', data: users.map(u => u.toJSON()) });
  } catch (err) {
    console.error(err);
    res.status(500).json({ status: 'error', error: err.message });
  }
});
//添加获取指定ID用户的接口
//api：GET/api/users/:id
//@route GET/api/users/:id
//@desc 获取指定ID用户的接口
//@access public

router.get('/:id', async (req, res) => {
  try { 
    //第一步：请求参数中获取用户ID
    //const userId= req.params.id;
    const{id}=req.params; 
    //第二步：调用数据库方法，根据用户ID查询用户
    const user = await User.findByPk(id);
    //第三步：返回查询结果
    if (!user) {
  return res.status(404).json({ 
    status: 'error', 
    error: '用户不存在'
 });
}
    res.json({ 
        status: 'ok', 
        data: user.toJSON() 
    });
  } catch (err) {
    //try-catch，处理不可预期的错误
    console.error(err);
    res.status(500).json({ status: 'error', error: err.message });
  }
})
// post/api/users
//api：
//@route post/api/users/
//@desc 创建新用户
//@access public
//测试用例：
// 1. 正常创建用户curl -X POST http://localhost:3304/api/users -H "Content-Type: application/json" -d "{\"nickName\":\"杨辉24\",\"avatarUrl\":\"http://example.com/avatar.jpg\",\"openid\":\"o1234567890\",\"active\":1}"
// 2. 创建用户时，缺少nickName字段curl -X POST http://localhost:3304/api/users -H "Content-Type: application/json" -d "{\"avatarUrl\":\"http://example.com/avatar.jpg\",\"openid\":\"o1234567890\",\"active\":1}"
// 3. 创建用户时，nickName字段为空curl -X POST http://localhost:3304/api/users -H "Content-Type: application/json" -d "{\"nickName\":\"  \",\"avatarUrl\":\"http://example.com/avatar.jpg\",\"openid\":\"o1234567890\",\"active\":1}"
// 4. 创建用户时，nickName字段过长curl -X POST http://localhost:3304/api/users -H "Content-Type: application/json" -d "{\"nickName\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"avatarUrl\":\"http://example.com/avatar.jpg\",\"openid\":\"o1234567890\",\"active\":1}"
// 5. 创建用户时，avatarUrl字段为空curl -X POST http://localhost:3304/api/users -H "Content-Type: application/json" -d "{\"nickName\":\"杨辉\",\"avatarUrl\":\"\",\"openid\":\"o1234567890\",\"active\":1}"
//1.注册创建用户
router.post('/', async (req, res) => { 
    try { 
        console.log('开始创建用户...');
        console.log(req.headers)
        console.log(req.body);

        //第一步：请求参数中获取用户信息
          //通过api接口文档与前端调用方约定好请求体格式
        const {nickName,avatarUrl,openid,active } = req.body;

        //第二步：验证用户信息
        if (!nickName || nickName.trim() === '' || nickName.length > 50) {
            return res.status(400).json({ status: 'error', message: '用户昵称(nickName)不能为空' });
        }
        //第三步：调用数据库方法，将用户信息写入数据库
        //手段指定参数，避免使用req.body直接传递，防止多传参数
        const user = await User.create({
          nickName,
          avatarUrl,
          openid,
          active
        });
        //第四步：返回结果
        //返回201状态码，表示创建成功
        res.status(201).json({ 
            status: 'ok', 
            data: user.toJSON() 
        });
    }
    catch (error) {
        res.status(500).json({ status: 'error', message: error.message });
    }
});


//导出路由对象，供其他文件使用
module.exports=router;